// 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
// jsdoc语法提示教程：https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129
module.exports = {
	_before: function () { // 通用预处理器

	},
	/**
	 * method1方法描述
	 * @param {string} param1 参数1描述
	 * @returns {object} 返回值描述
	 */
	/* 
	method1(param1) {
		// 参数校验，如无参数则不需要
		if (!param1) {
			return {
				errCode: 'PARAM_IS_NULL',
				errMsg: '参数不能为空'
			}
		}
		// 业务逻辑
		
		// 返回结果
		return {
			param1 //请根据实际需要返回值
		}
	}
	*/
	/**
	 * 发送消息并存储到message集合
	 * @param {Object} params 消息参数
	 * @param {string} params.fromUserId 发送者ID
	 * @param {string} params.toUserId 接收者ID
	 * @param {string} params.content 消息内容
	 * @param {string} [params.avatar] 发送者头像
	 * @param {number} [params.createTime] 发送时间戳
	 * @param {string} [params.type] 消息类型，默认'text'
	 * @returns {object} 发送结果
	 */
	sendMessage: async function(params) {
		const db = uniCloud.database()
		const { fromUserId, toUserId, content, avatar, createTime, type = 'text' } = params
		if (!fromUserId || !toUserId || !content) {
			return { code: 400, msg: '参数不完整' }
		}
		try {
			await db.collection('message').add({
				fromUserId,
				toUserId,
				content,
				avatar,
				createTime: createTime || Date.now(),
				type,
				isRead: false
			})
			return { code: 200, msg: '发送成功' }
		} catch (error) {
			console.error('消息发送失败:', error)
			return { code: 500, msg: '消息发送失败' }
		}
	},
	/**
	 * 获取历史聊天消息
	 * @param {Object} params 参数
	 * @param {string} params.userId 当前用户ID
	 * @param {string} params.targetUserId 对方用户ID
	 * @param {number} [params.page=1] 页码
	 * @param {number} [params.pageSize=20] 每页数量
	 * @returns {object} 聊天消息列表
	 */
	getChatHistory: async function(params) {
		const { userId, targetUserId, page = 1, pageSize = 20 } = params
		const db = uniCloud.database()
		const $ = db.command
		const res = await db.collection('message')
			.where($.or([
				{ fromUserId: userId, toUserId: targetUserId },
				{ fromUserId: targetUserId, toUserId: userId }
			]))
			.orderBy('createTime', 'desc')
			.skip((page - 1) * pageSize)
			.limit(pageSize)
			.get()
		return {
			code: 200,
			data: res.data.reverse() // 正序显示
		}
	},
}
